package agentes09.negotiation.behaviours;

import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.ACLMessage;
import java.util.Random;


public class NegociacionCamionGasolinera extends CyclicBehaviour {
    ACLMessage mensaje;
    ACLMessage respuesta;
    @Override
    public void action() {
        mensaje = myAgent.receive();
        
// Esta es la prueba de negociacion que habia hecho Martin
// Interferia con los mensajes PROPOSE de la negociacion Productor-Camion
        
/*        
        if (mensaje != null)
        {
             //informar a los camiones sobre las propuestas de gasoil
             if (mensaje.getPerformative() == ACLMessage.PROPOSE)
             {
                //acepta o no
                 int i = new Random().nextInt(2);
                 respuesta = mensaje.createReply();
                
                 respuesta.setContent("");
                 if (i == 0)
                 {
                    //respondo que si
                    respuesta.setPerformative(ACLMessage.ACCEPT_PROPOSAL);
                    respuesta.addUserDefinedParameter("litros", "100");
                 }
                 else
                 {
                     //respondo que no
                     respuesta.setPerformative(ACLMessage.REJECT_PROPOSAL);
                 }                 
                 myAgent.send(respuesta);
             }
                  
             else if (mensaje.getPerformative() == ACLMessage.AGREE)
             {                
                //ACLMessage.INFORM
                 System.out.println(myAgent.getAID().getLocalName()+": Aceptada mi oferta por el gasoil");
             }
        }
        else block();
*/        

        if (mensaje != null)
        {
             //informar a los camiones sobre disponibilidad de gasoil
        	 //responder a la gasolinera con la propuesta de litros a repostar	
             if (mensaje.getPerformative() == ACLMessage.CFP)
             {
                //acepta o no
                 int i = new Random().nextInt(2);
                 respuesta = mensaje.createReply();
                
                 respuesta.setContent("");
                 if (i == 0)
                 {
                    //respondo con una propuesta
                    respuesta.setPerformative(ACLMessage.PROPOSE);
                    respuesta.addUserDefinedParameter("litros", "100");
                    myAgent.send(respuesta);
                 }
                 else
                 {
                     //no respondo
                     //respuesta.setPerformative(ACLMessage.REJECT_PROPOSAL);
                 }                 
             }
                  
             else if (mensaje.getPerformative() == ACLMessage.ACCEPT_PROPOSAL)
             {                
                 //ACLMessage.INFORM
                 System.out.println(myAgent.getAID().getLocalName()+": Aceptada mi oferta por el gasoil");

                 //acepta o no
                 int i = new Random().nextInt(2);
                 respuesta = mensaje.createReply();


                 respuesta.setContent("");
                 if (i == 0)
                 {
                    //respondo con una propuesta
                    respuesta.setPerformative(ACLMessage.AGREE);
                 }
                 else
                 {
                     respuesta.setPerformative(ACLMessage.CANCEL);
                 }                 
                 myAgent.send(respuesta);
             }
/* Esta es la parte de negociacion que habia en la clase NegociacionCamion
 * entre el camion y el productor
 * Asi ya no interfieren los mensajes, y solo hay un receptor de la cola de mensajes             
 */
             //informar a todos al agente que me informa que estoy o no toy interesado
             //en el paquete
             else if (mensaje.getPerformative() == ACLMessage.PROPOSE)
             {
                //puedo decir sin o no
                 int i = new Random().nextInt(2);
                 respuesta = mensaje.createReply();
                 //System.out.println("generador  " + i);
                 i = 0;
                 respuesta.setContent("");
                 if (i == 0)
                 {
                    //respondo que si
                    respuesta.setPerformative(ACLMessage.ACCEPT_PROPOSAL);
                 }
                 else
                 {
                     //respondo que no
                     respuesta.setPerformative(ACLMessage.REJECT_PROPOSAL);
                 }                 
                 myAgent.send(respuesta);
             }
             //en caso de aceptar el inicio de negociacion del paquete analizo que valor puedo ofrecer
             //y luego mando la info
             else if (mensaje.getPerformative() == ACLMessage.REQUEST)
             {
                //analizo cuanto me saldria costo/beneficio
                //en base a la informacion que me manda el agente productor
                //ACLMessage.INFORM
                 int i = new Random().nextInt(11);
                 respuesta = mensaje.createReply();
                 respuesta.setContent(i*0.1+"");
                 respuesta.setPerformative(ACLMessage.INFORM);
                 myAgent.send(respuesta);
             }
             //en caso de aceptar la negociación guardo datos o cosnulto otros             
             else if (mensaje.getPerformative() == ACLMessage.AGREE)
             {                
                //ACLMessage.INFORM
                 System.out.println(myAgent.getAID().getLocalName()+": FUI SELECCIONADO PARA LLEVAR CARGA");
             }
             
        }
        else block();

    }

}

